10
תגובות
תגי Meta ל Layouts ב Yii
פתח
Kzrh
,
היי.
אני משתמש ב Yii עם layout.
אני רוצה להעביר ל Layout תגי Meta שאני קובע דרך הקוד/קונטרולר.
הנה דוגמה לקונטרולר:
כפי שאתם רואים, אני משתמש ב layout בשם 'all'.
הנה ה Layout:
עכשיו, אני רוצה להשתמש במשהו כמו registerMetaTag, או אפילו סתם להעביר משתנים כמו ב render.
איך אני עושה את זה ב Layout?
תודה.
דרך אגב, אם יש דרך יותר טובה לעשות שלכל דף יהיה תגי מטה משלו (keywords, description) אז תגידו לי בבקשה..
אני משתמש ב Yii עם layout.
אני רוצה להעביר ל Layout תגי Meta שאני קובע דרך הקוד/קונטרולר.
הנה דוגמה לקונטרולר:
<?php
class MainController extends CController {
public $layout = 'all';
public function actionIndex() {
$this->pageTitle = 'PSN Trophies - Home Page';
$this->render('index');
}
}
?>
class MainController extends CController {
public $layout = 'all';
public function actionIndex() {
$this->pageTitle = 'PSN Trophies - Home Page';
$this->render('index');
}
}
?>
כפי שאתם רואים, אני משתמש ב layout בשם 'all'.
הנה ה Layout:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title><?= $this->pageTitle; ?></title>
</head>
<body>
<?= $content; ?>
</body>
</html>
<html>
<head>
<meta charset="utf-8" />
<title><?= $this->pageTitle; ?></title>
</head>
<body>
<?= $content; ?>
</body>
</html>
עכשיו, אני רוצה להשתמש במשהו כמו registerMetaTag, או אפילו סתם להעביר משתנים כמו ב render.
איך אני עושה את זה ב Layout?
תודה.
דרך אגב, אם יש דרך יותר טובה לעשות שלכל דף יהיה תגי מטה משלו (keywords, description) אז תגידו לי בבקשה..
10 תשובות
רמז
חוץ מזה, אתה תמיד יכול לפתוח את קוד המקור של האתר הזה ולראות איך עשו משהו כאן
תודה רבה. אני באמת אתחיל להסתכל קצת יותר על ה Github של האתר :) שמתי לב שגם האתר הזה בנוי ב Yii.
ניסיתי, ואני מקבל שגיאה. עשיתי ככה:
HomepageController:
<?php
class HomepageController extends CController {
public $layout = 'all';
public function actionIndex() {
$this->pageTitle = 'PSN Trophies - Home Page';
$this->description = 'PlayStation Network Profile Trophies Home Page';
$this->keywords = 'psn,playstation,netwrok,profile,trophy,card,trophies,sig,signature,forum,website,homepage,home,page';
$this->render('index');
}
}
?>
class HomepageController extends CController {
public $layout = 'all';
public function actionIndex() {
$this->pageTitle = 'PSN Trophies - Home Page';
$this->description = 'PlayStation Network Profile Trophies Home Page';
$this->keywords = 'psn,playstation,netwrok,profile,trophy,card,trophies,sig,signature,forum,website,homepage,home,page';
$this->render('index');
}
}
?>
ה Layout:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="description" content="<?= $this->description; ?>" />
<meta name="keywords" content="<?= $this->keywords; ?>" />
<title><?= $this->pageTitle; ?></title>
</head>
<body>
<h1>PSN Trophies</h1>
<hr />
<?= CHtml::link('Register', 'index.php?r=user/register'); ?> |
<?= CHtml::link('Login', 'index.pph?r=user/login'); ?>
<hr />
<?= $content; ?>
</body>
</html>
<html>
<head>
<meta charset="utf-8" />
<meta name="description" content="<?= $this->description; ?>" />
<meta name="keywords" content="<?= $this->keywords; ?>" />
<title><?= $this->pageTitle; ?></title>
</head>
<body>
<h1>PSN Trophies</h1>
<hr />
<?= CHtml::link('Register', 'index.php?r=user/register'); ?> |
<?= CHtml::link('Login', 'index.pph?r=user/login'); ?>
<hr />
<?= $content; ?>
</body>
</html>
השגיאה:
Property "HomepageController.description" is not defined.
כמובן, לא הגדרת בשום מקום את קיומו של המאפיין description במחלקת HomepageController
עדיף ישר ב CController, במקום לכתוב את זה בכל קובץ מחדש ולקבל שגיאות במקומות שהם לא כתבת
סתם משהו שלא מסתדר לי, למה המשתנה הזה צריך להיות public? לא מספיק לו protected?
כאילו תאכלס, כל הפעולות של הקונטרולר מתבצעות בתוכו.. לא זכור לי עבודה עם הקונטרולר מחוצה לו.
צודק, גם אני לא זוכר הרבה פעולות שנעשות על קונטרולרים מחוץ להם, למעט מקרים שווידג'ט מסוים, כמו צ'אט בעמוד,
רוצה לשנות את הטייטל של העמוד כשמגיעה הודעה חדשה.